package com.yugao.fintech.antelope.pay.constant;

import com.yugao.fintech.framework.assistant.utils.exception.BizException;

import java.util.EnumSet;
import java.util.Objects;

/**
 * private final String code;
 * private final String desc;

 */
public interface BaseEnum {
    String getCode();
    String getDesc();

    static <E extends Enum<E> & BaseEnum> E ofByCode(Integer code, Class<E> clazz) {
        Objects.requireNonNull(code);
        EnumSet<E> all = EnumSet.allOf(clazz);
        return all.stream().filter(e -> code.compareTo(Integer.parseInt(e.getCode())) == 0).findFirst().orElse(null);
    }

    static <E extends Enum<E> & BaseEnum> E ofByCode(String code, Class<E> clazz) {
        Objects.requireNonNull(code);
        EnumSet<E> all = EnumSet.allOf(clazz);
        return all.stream().filter(e -> e.getCode().equals(code)).findFirst().orElse(null);
    }

    static <E extends Enum<E> & BaseEnum> E ofThrowByCode(String code, Class<E> clazz) {
        Objects.requireNonNull(code);
        EnumSet<E> all = EnumSet.allOf(clazz);
        return all.stream().filter(e -> e.getCode().equals(code)).findFirst().orElseThrow(() -> new BizException("{} 不存在", code));
    }
}
